1. Statement of the Technical Field
The present invention relates to the field of memory leak detection and remediation and more particularly to the location of memory leak origins.
2. Description of the Related Art
Memory leakage has confounded software developers for decades resulting in the sometimes global distribution of bug-ridden, crash-prone software applications. Particularly in respect to those programming languages which permitted the manual allocation of memory, but also required the manual de-allocation of allocated memory, memory leakage has proven to be the principal run-time bug most addressed during the software development cycle. So prevalent a problem has memory leakage become, entire software development tools have been developed and marketed solely to address the memory leakage problem.
Memory leakage, broadly defined, is the gradual loss of allocable memory due to the failure to de-allocate previously allocated, but no longer utilized memory. Typically, memory can be reserved for data having a brief lifespan. Once the lifespan has completed, the reserved memory ought to be returned to the pool of allocable memory so that the reserved memory can be used at a subsequent time as necessary. Importantly, where memory leakage persists without remediation, ultimately not enough memory will remain to accommodate the needs of other processes.
Recognizing the importance of addressing the memory leakage problem, computer programming language theorists have developed the notion of garbage collection. Garbage collection refers to the automated analysis of allocated memory to identify regions of allocated memory containing data which no longer are required for the operation of associated processes. In the context of object oriented programming languages such as the Java™ programming language, when objects residing in memory are no longer accessible within a corresponding application, the memory allocated to the “dead” object can be returned to the pool of allocable memory.
Even within a garbage collection system, memory leaks can easily occur when a layer of code has been written to pool a set of computing resources. By pooling resources, a section of the code always will maintain a reference to a computing resource within the pool represented within memory, even when the resource no longer is useful and ought to be garbage collected. Yet, often rogue code retrieves an object from the pool without subsequently returning the object when the object is no longer required by the rogue code. As a result, a memory leak can arise as the reference to the object in the pool remains intact though the object no longer practically exists in the pool.
Whereas memory leak detection can be problematic generally, in an autonomic system, the problem can be particularly acute. For the uninitiated, autonomic computing systems self-regulate, self-repair and respond to changing conditions, without requiring any conscious effort on the part of the computing system operator. To that end, the computing system itself can bear the responsibility of coping with its own complexity. The crux of autonomic computing relates to eight principal characteristics:
I. The system must “know itself” and include those system components which also possess a system identify.
II. The system must be able to configure and reconfigure itself under varying and unpredictable conditions.
III. The system must never settle for the status quo and the system must always look for ways to optimize its workings.
IV. The system must be self-healing and capable of recovering from routine and extraordinary events that might cause some of its parts to malfunction.
    V. The system must be an expert in self-protection.VI. The system must know its environment and the context surrounding its activity, and act accordingly.VII. The system must adhere to open standards.VIII. The system must anticipate the optimized resources needed while keeping its complexity hidden from the user.Thus, in keeping with the principles of autonomic computing, not only will memory leak detection be important, but also the determination of the origin of a memory leak can be imperative to the autonomic detection of memory leaks.